package com.Test1;


//请写出以下程序的运行结果....
public class A {
    public String show(D obj) {
        return ("A and D");
    }

    public String show(A obj) {
        return ("A and A");
    }

    public static void main(String[] args) {
        A a1 = new A();
        /**
         * 与子类没有任何关系
         * 调用方法时，只能调用本类或父类继承下来 的方法
         * show（D）
         */
        A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();
        System.out.println(a1.show(b)); // ①
        //实参为B类型对象，只能调用A的show（）方法
        System.out.println(a1.show(c)); // ②
        System.out.println(a1.show(d));//  ③

        System.out.println(a2.show(b)); // ④
        System.out.println(a2.show(c));//  ⑤

        System.out.println(a2.show(d));//  ⑥
        System.out.println(b.show(b)); //  ⑦
        System.out.println(b.show(c)); //  ⑧

        System.out.println(b.show(d)); //  ⑨
    }
}

class B extends A {
    public String show(B obj) {
        return ("B and B");
    }
@Override//重写的
    public String show(A obj) {
        return ("B and A");
    }
}

class C extends B {
}

class D extends B {
}